import os
import cv2
import datetime
import logging

def setup_logger():
    # 创建日志记录器
    logger = logging.getLogger("camera_logger")
    logger.setLevel(logging.DEBUG)

    # 创建文件处理器
    log_file = os.path.join(os.getcwd(), "camera.log")
    file_handler = logging.FileHandler(log_file)
    file_handler.setLevel(logging.DEBUG)

    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)

    # 创建日志格式器
    log_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    file_handler.setFormatter(log_formatter)
    console_handler.setFormatter(log_formatter)

    # 将处理器添加到记录器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger

def capture_image():
    try:
        # 检查系统中的USB摄像头设备
        usb_cameras = []
        for index in range(10):
            dev_path = f"/dev/video{index}"
            if os.path.exists(dev_path):
                usb_cameras.append(dev_path)

        if not usb_cameras:
            logger.error("未检测到USB摄像头设备")
            return

        # 选择第一个USB摄像头设备
        camera_device = usb_cameras[0]

        # 初始化摄像头，并设置分辨率和图像格式
        cap = cv2.VideoCapture(camera_device)
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
        cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG"))

        # 连续读取5张图像
        for _ in range(5):
            ret, frame = cap.read()
            cv2.waitKey(100)

        # 保存第六张图像
        ret, frame = cap.read()

        # 释放摄像头
        cap.release()

        # 确保图像读取成功
        if not ret:
            raise Exception("无法读取图像")

        # 获取当前时间
        current_time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")

        # 创建保存目录
        save_dir = os.path.join(os.getcwd(), "photos")
        os.makedirs(save_dir, exist_ok=True)

        # 图像保存路径
        image_path = os.path.join(save_dir, f"{current_time}.jpg")

        cv2.imwrite(image_path, frame)

        logger.info(f"已保存图像：{image_path}")

    except Exception as e:
        # 记录报错信息和时间
        current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        error_message = f"发生错误：{str(e)}，时间：{current_time}"
        logger.error(error_message)

# 设置日志记录器
logger = setup_logger()

# 运行程序
capture_image()